package com.ruoyi.pay.utils;

import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.pay.domain.OssYmlConfig;
import com.ruoyi.pay.oss.service.IOssService;
import com.ruoyi.system.domain.vo.SysOssVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

/*
* 支付平台 获取系统文件工具类
*
* @author syf
* @site
* @date 2021/6/8 17:45
*/
@Component
public class ChannelCertConfigKitBean {

    @Autowired private OssYmlConfig ossYmlConfig;
    @Autowired private IOssService iossService;


    /**
     * <简述>生成文件返回地址
     * <详细描述>
     * @author syf
     * @date 2025/5/7 17:04
     * @param ossId
     * @return java.io.File
     */
    public String getCertFilePath(String ossId){
        return getCertFile(ossId).getAbsolutePath();
    }

    public File getCertFile(String ossId){
         SysOssVo ossByUrl = iossService.getOssById(Long.parseLong(ossId));
         if (null == ossByUrl) return null;
         //文件名称
         String name = Paths.get(ossYmlConfig.getOss().getFileRootPath(), ossByUrl.getOriginalName()).toString();
        try {
             File certFile = downloadRemoteFile(ossByUrl.getUrl(), name);
            // 请求下载并返回 新File
            return certFile;
        } catch (IOException e) {
            e.printStackTrace();
            throw new ServiceException(e.getMessage());
        }

    }

    /**
     * 下载远程文件到指定目标路径
     *
     * @param fileUrl  远程文件URL
     * @param targetPath 本地保存路径（包括文件名）
     * @return 下载后的本地文件对象
     * @throws IOException
     */
    public static File downloadRemoteFile(String fileUrl, String targetPath) throws IOException {
        // 创建目标文件对象
        File targetFile = new File(targetPath);

        // 确保父目录存在
        if (!targetFile.getParentFile().exists()) {
            targetFile.getParentFile().mkdirs();
        }

        // 下载并写入文件 (下载文件到本地)
        try (InputStream in = new URL(fileUrl).openStream()) {
            Files.copy(in, targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
        }

        return targetFile;
    }



}
